//
// Author: Vladimir Migashko <migashko@gmail.com>, (C) 2011
//
// Copyright: See COPYING file that comes with this distribution
//
#ifndef HITLIST_HITLIST_BACKUP_HPP
#define HITLIST_HITLIST_BACKUP_HPP

#include "ibackup.hpp"
#include "backup.hpp"
#include "ihitlist.hpp"

/** @brief резервное хранилище хитов пользователя
 * 
 * Позволяет хранить данные как в json формате, так в двоичном
 */
class hitlist_backup
  : public ibackup
{
public:
  virtual ~hitlist_backup();
  hitlist_backup();
  /// Задать объект бинарного хранилища
  void binary_backup(backup* b);
  /// Задать объект json хранилища
  void json_backup(backup* b);
  /// Сохранить хит
  virtual void write_hit(user_id_t first_id, user_id_t second_id, time_t hit_time);
  /// Сбросить на диск (рекомендуется периодически вызывать)
  void flush();
  /// Включить(отключить ) тестовый режим
  /** В тестовом режиме для формирования имени backup файла используется не текущее время, а время хита */
  void test_mode(bool enable);

  /// Востановить данные из хранилища
  /** @param binary если true то из бинарного хранилища, json в противном случае
   *  @param hl куда восстанавливать
   *  @param day_ago начиная с какого дня востанавливать (30 - месячная давность)
    */
  void restore(bool binary, ihitlist* hl, int day_ago);

private:
  backup* _binary;
  backup* _json;
  char _buff[255];
  bool _test_mode;
};

#endif

